<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="description" content="A tool used to obfuscate python scripts." />
  <meta name="keywords" content="python, obfuscate, obfuscation, obfuscator" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

  <title>Obfuscate Python Scripts</title>

  <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
  <style type="text/css">
    #global-message {
      position: absolute;
      left: 0;
      right: 0;
      top: 50px;
      z-index: 1;
    }
    input.form-control.required {
      background-color: #f5f5dc;
    }
  </style>

  <script type="text/javascript" src="js/jquery.min.js"></script>
  <script type="text/javascript" src="js/bootstrap.min.js"></script>
  <script data-main="app" src="js/require.js"></script>
  <script type="text/javascript"></script>
</head>

<body role="document">
  <nav role="navigation" class="navbar navbar-inverse">
    <div class="container">
      <div class="navbar-header">
        <a class="navbar-brand" href="http://pyarmor.dashingsoft.com">PyArmor <span class="badge">Trial</span></a>
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-main-tab" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
      </div>
      <!-- /.navbar-header -->
      <div class="collapse navbar-collapse" id="navbar-main-tab">
        <ul class="nav navbar-nav">
          <li role="presentation" class="active"><a href="#tab-scripts" aria-controls="tab-scripts" role="tab" data-toggle="tab">Obfuscator</a></li>
          <li role="presentation"><a href="#tab-licenses" aria-controls="tab-licenses" role="tab" data-toggle="tab">Licensor</a></li>
          <li role="presentation"><a href="#tab-packer" aria-controls="tab-packer" role="tab" data-toggle="tab">Packer</a></li>
          <li role="presentation"><a href="#obfuscator-console" aria-controls="obfuscator-console" role="tab" data-toggle="tab">Help &amp; Logs</a></li>
        </ul>
        <ul class="nav navbar-nav navbar-right">
          <li role="presentation"><a class="btn-link" href="https://order.shareit.com/cart/add?vendorid=200089125&PRODUCT[300871197]=1">Purchase</a></li>
          <li role="presentation"><a class="btn-link" href="index-zh.html">中文版</a></li>
          <!-- <li role="presentation"><button type="button" class="btn btn-success navbar-btn btn-sm">中文版</button></li>           -->
        </ul>
      </div>
      <!-- /.navbar-collapse -->
    </div>
    <!-- /.container -->
  </nav>

  <div id="global-message"></div>

  <div class="tab-content container">
    <div role="tabpanel" class="tab-pane active" id="tab-scripts">
      <div class="panel panel-info">
        <div class="panel-heading">Obfuscate python scripts</div>
        <div class="panel-body">
          <form>
            <div class="form-group" style="display: none;">
              <label for="input_src">Source Path</label>
              <input type="text" class="form-control required" id="input_src" />
              <p class="help-block">Required. Absolute path, all the <code>.py</code> files in this path will be obfuscated recursively.</p>
            </div>
            <div class="form-group">
              <label for="input_entry">Entry Script</label>
              <input type="text" class="form-control required" id="input_entry"/>
              <p class="help-block">Required. Absolute path of entry script. Type full path <code>__init__.py</code> for Package</p>
              <p class="help-block">All the <code>.py</code> files in this path will be obfuscated</p>
            </div>
            <div class="form-group">
              <label for="input_output">Output Path</label>
              <input type="text" class="form-control" id="input_output"/>
              <p class="help-block">Optional. The default output path is <code>dist</code> within PyArmor package</p>
            </div>
            <button type="button" class="btn btn-primary" id="obfuscate-scripts">Build</button>
          </form>
        </div>
        <!-- /.panel-body -->
      </div>
      <!-- /.panel-default -->
    </div>
    <!-- /.tab-pane -->
    <div role="tabpanel" class="tab-pane" id="tab-licenses">
      <div class="panel panel-info">
        <div class="panel-heading">Generate new license for obfuscated scripts</div>
        <div class="panel-body">
          <form>
            <div class="form-group">
              <p class="help-block text-muted"><small>While obfuscating scripts the default license file <code>license.lic</code> has been generated. Here it's only for generating new license</small></p>
            </div>
            <div class="form-group">
              <label for="input_license_rcode">Registration Code</label>
              <input type="text" class="form-control required" id="input_license_rcode"/>
              <p class="help-block">Required. Must be identify string, no space</p>
              <!-- <p>the new license will be saved as <code>licenses/CODE/liceense.lic</code> within PyArmor package.</p> -->
            </div>
            <div class="form-group">
              <label for="input_expired_date">Expired Date</label>
              <input type="text" class="form-control" id="input_expired_date" placeholder="YYYY-MM-DD" />
              <p class="help-block">Optional. Expire obfuscated scripts on the date <code>YYYY-MM-NN</code></p>
            </div>
            <div class="form-group">
              <label for="input_bind_disk">Serial Number of Harddisk</label>
              <input type="text" class="form-control" id="input_bind_disk"/>
              <p class="help-block">Optional. Bind obfuscated scripts to fixed harddisk</p>
            </div>
            <div class="form-group">
              <label for="input_bind_mac">Mac Address</label>
              <input type="text" class="form-control" id="input_bind_mac" placeholder="aa:bb:cc:dd:ee:ff" />
              <p class="help-block">Optional. Bind obfuscated scripts to mac address</p>
            </div>
            <div class="form-group" style="display: none;">
              <label for="input_bind_ipv4">IPv4 Address</label>
              <input type="text" class="form-control" id="input_bind_ipv4" placeholder="x.x.x.x" />
              <p class="help-block">Optional. Bind obfuscated scripts to IPv4 address</p>
            </div>
            <button type="button" class="btn btn-primary" id="generate-licenses">Generate</button>
          </form>
        </div>
        <!-- /.panel-body -->
      </div>
      <!-- /.panel-default -->
    </div>
    <!-- /.tab-pane -->
    <div role="tabpanel" class="tab-pane" id="tab-packer">
      <div class="panel panel-info">
        <div class="panel-heading">Pack obfuscated scripts</div>
        <div class="panel-body">
          <form>
            <div class="form-group">
              <p class="help-block">If PyInstaller is not installed, run <code>pip install pyinstaller</code> first</p>
              <!-- <p class="help-block">PyArmor could pack obfuscated scripts with PyInstaller, py2exe, cx_Freeze etc. </p> -->
              <!-- <p class="help-block">Before run it, be sure that the setup script of py2exe or cx_Freeze works. PyArmor will call setup script while packing</p> -->
              <!-- <p class="help-block">The final output path is same as of the setup script (PyArmor just updates some files)</p> -->
            </div>
            <div class="form-group" style="display: none;">
              <label for="input_packer_type">Type</label>
              <select class="form-control" id="input_packer_type">
                <option value="cx_Freeze">cx_Freeze</option>
                <option value="py2app">py2app</option>
                <option value="py2exe">py2exe</option>
                <option value="PyInstaller" selected>PyInstaller</option>
              </select>
              <p class="help-block">This selected package must be installed</p>
              <p class="help-block">The prefer way is PyInstaller, it's enough to set <strong>Entry Script</strong>. For other tools, the setup script is required, PyArmor will call this script while packing</p>
              <!-- <p class="help-block">The final output path is depend on the selected type</p>  -->
            </div>
            <div class="form-group">
              <label for="input_packer_entry">Entry Script</label>
              <input type="text" class="form-control required" id="input_packer_entry" />
              <p class="help-block">Required. Absolute path of entry script</p>
            </div>
            <div class="form-group" style="display: none;">
              <label for="input_packer_setup">Setup Script</label>
              <input type="text" class="form-control" id="input_packer_setup"/>
              <p class="help-block">Optional. The default is <code>setup.py</code></p>
            </div>
            <div class="form-group">
              <label for="input_packer_output">Output Path</label>
              <input type="text" class="form-control" id="input_packer_output"/>
              <p class="help-block">Optional. The default is <code>dist</code> in the path of <strong>Entry Script</strong></p>
            </div>
            <button type="button" class="btn btn-primary" id="pack-obfuscated-scripts">Run</button>
          </form>
        </div>
        <!-- /.panel-body -->
      </div>
      <!-- /.panel-default -->
    </div>
    <!-- /.tab-pane -->
    <div role="tabpanel" class="tab-pane" id="obfuscator-console">
      <div class="panel panel-info">
        <div class="panel-heading">View action logs</div>
        <div class="panel-body">
          <form>
            <div class="form-group">
              <p class="help-block">Run command <code>pyarmor-webui</code> to start PyArmor webui. It doesn't work to open this page in the web browser directly</p>
              <p class="help-block">A light-weight webserver is lanuched in background to serve any request from webui, all the output of each action will be print in the console window of this webserver</p>
              <p class="help-block">PyArmor webui includes basic functions only, for advanced usage, use command <code>pyarmor</code> instead</p>
            </div>
            <div class="form-group">
              <label for="project-log-message">Messages</label>
              <textarea class="form-control" rows="10" id="project-log-message" readonly></textarea>
            </div>
            <a id="clear-log-message" role="button" class="btn btn-primary">Clear</a>
          </form>
        </div>
      </div>
      <!-- /.panel-default -->
    </div>
    <!-- /.tab-pane -->
  </div>
  <!-- /.tab-content -->

</body>
</html>
